home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1994 November / macformat-018.iso / Utility Spectacular / Developer / QB->FB / qbCLR.incl < prev   
Encoding:
Text File  |  1993-02-23  |  8.5 KB  |  283 lines  |  [TEXT/ZBAS]

  1. '
  2. ' qbCLR include
  3. '
  4. ' some re-written routines to match the CLR calls available in QB as 
  5. ' well as some general purpose routines former QB users may find useful.
  6.  
  7. INCLUDE FILE _aplIncl
  8. '
  9. ' --- RESOURCE FUNCTIONS -------------------------------
  10.  
  11. LOCAL FN qbAddResource (resHndl&, restype&, resID%, resName$)
  12.   tmpHndl& = FN GETRESOURCE (restype&, resID%)           'is resource already there?
  13.   LONG IF tmpHndl& <> 0 AND SYSERROR = _noErr            'no errors?
  14.     CALL RMVERESOURCE (tmpHndl&)                         'delete old copy
  15.   END IF
  16.   CALL ADDRESOURCE (resHndl&, restype&, resID%, resName$)'add new resource
  17.   CALL WRITERESOURCE (resHndl&)                          'write to file
  18.   DEF DISPOSEH (resHndl&)
  19. END FN
  20.  
  21.  
  22. LOCAL FN qbAddCursor (resHndl&, resID%, resName$)
  23.   FN qbAddResource (resHndl&, _"CURS", resID%, resName$)
  24. END FN
  25.  
  26.  
  27. LOCAL FN qbAddIcon (resHndl&, resID%, resName$)
  28.   FN qbAddResource (resHndl&, _"ICON", resID%, resName$)
  29. END FN
  30.  
  31.  
  32. LOCAL FN qbAddPattern (resHndl&, resID%, resName$)
  33.   FN qbAddResource (resHndl&, _"PAT ", resID%, resName$)
  34. END FN
  35.  
  36.  
  37. LOCAL FN qbAddPicture (resHndl&, resID%, resName$)
  38.   FN qbAddResource (resHndl&, _"PICT", resID%, resName$)
  39. END FN
  40.  
  41.  
  42. LOCAL FN qbAddString (resHndl&, resID%, resName$)
  43.   FN qbAddResource (resHndl&, _"STR ", resID%, resName$)
  44. END FN
  45.  
  46.  
  47. LOCAL FN qbMakeHandle (arrayPtr&, arraySize%)
  48.   resHndl& = 0
  49.   resHndl& = FN NEWHANDLE (arraySize%)
  50.   LONG IF resHndl& <> 0 AND SYSERROR = _noErr
  51.     osErr = FN HLOCK (resHndl&)
  52.     BLOCKMOVE arrayPtr&, [resHndl&], numBytes%
  53.     osErr = FN HUNLOCK (resHndl&)
  54.   END IF
  55. END FN = resHndl&
  56.  
  57.  
  58. LOCAL FN qbSaveArray (arrayPtr&, arraySize%, resID%, resName$, type&)
  59.   resHndl& = FN qbMakeHandle (arrayPtr&, arraySize%)
  60.   LONG IF resHndl& <> 0
  61.     IF type& = 0 THEN type& = _"GNRL"
  62.     FN qbAddResource (resHndl&, type&, resID%, resName$)
  63.   END IF
  64. END FN
  65.  
  66.  
  67. LOCAL FN qbSaveCursor (resID%, arrayPtr&, resName$)
  68.   resHndl& = FN qbMakeHandle (arrayPtr&, arraySize%)
  69.   LONG IF resHndl& <> 0
  70.     FN qbAddResource (resHndl&, _"CURS", resID%, resName$)
  71.   END IF
  72. END FN
  73.  
  74.  
  75. LOCAL FN qbSaveIcon (resID%, arrayPtr&, resName$)
  76.   resHndl& = FN qbMakeHandle (arrayPtr&, arraySize%)
  77.   LONG IF resHndl& <> 0
  78.     FN qbAddResource (resHndl&, _"ICON", resID%, resName$)
  79.   END IF
  80. END FN
  81.  
  82.  
  83.  
  84. LOCAL FN qbSavePattern (resID%, arrayPtr&, resName$)
  85.   resHndl& = FN qbMakeHandle (arrayPtr&, arraySize%)
  86.   LONG IF resHndl& <> 0
  87.     FN qbAddResource (resHndl&, _"PAT ", resID%, resName$)
  88.   END IF
  89. END FN
  90.  
  91.  
  92. ' ••• ???????????
  93. LOCAL FN qbSavePicture (resID%, @pictPtr&, resName$)
  94.   resHndl& = FN qbMakeHandle (pictPtr&, pictSize%)
  95.   LONG IF resHndl& <> 0
  96.     FN qbAddResource (resHndl&, _"PICT", resID%, resName$)
  97.   END IF
  98. END FN
  99.  
  100.  
  101. ' ••• ???????????
  102. LOCAL FN qbSaveString (resID%, @arrayPtr&, resName$)
  103.   resHndl& = FN qbMakeHandle (arrayPtr&, PEEK(arrayPtr&))
  104.   LONG IF resHndl& <> 0
  105.     FN qbAddResource (resHndl&, _"STR ", resID%, resName$)
  106.   END IF
  107. END FN
  108.  
  109.  
  110.  
  111. LOCAL FN qbRsrcToArray (resID, arrayPtr&, resType&)
  112.   tmpHndl& = FN GETRESOURCE (resType&, resID)            'is resource already there?
  113.   LONG IF tmpHndl& <> 0 AND SYSERROR = _noErr            'no errors?
  114.     hndlSize& = FN GETHANDLESIZE(tmpHndl&)
  115.     osErr = FN HLOCK (tmpHndl&)
  116.     BLOCKMOVE [tmpHndl&], arrayPtr&, hndlSize&
  117.     osErr = FN HUNLOCK (tmpHndl&)
  118.     DEF DISPOSEH (tmpHndl&)
  119.   END IF
  120. END FN
  121.  
  122.  
  123. LOCAL FN qbLoadArray (resID, @arrayPtr&, resType$)
  124.   resType& = CVI(resType$)
  125.   IF resType& = 0 THEN resType& = _"GNRL"
  126.   FN qbRsrcToArray (resID, arrayPtr&, resType&)
  127. END FN
  128.  
  129.  
  130. LOCAL FN qbLoadCursor (resID, @arrayPtr&)
  131.   FN qbRsrcToArray (resID, arrayPtr&, _"CURS")
  132. END FN
  133.  
  134.  
  135. LOCAL FN qbLoadIcon (resID, @arrayPtr&)
  136.   FN qbRsrcToArray (resID, arrayPtr&, _"ICON")
  137. END FN
  138.  
  139.  
  140. LOCAL FN qbLoadPattern (resID, @arrayPtr&)
  141.   FN qbRsrcToArray (resID, arrayPtr&, _"PAT ")
  142. END FN
  143.  
  144.  
  145. LOCAL FN qbLoadPicture (resID, @arrayPtr&)
  146.   FN qbRsrcToArray (resID, arrayPtr&, _"PICT")
  147. END FN
  148.  
  149.  
  150. LOCAL FN qbLoadString (resID, @arrayPtr&)
  151.   FN qbRsrcToArray (resID, arrayPtr&, _"STR ")
  152. END FN
  153.  
  154.  
  155.  
  156. ' --- GRAPHIC FUNCTIONS -----------------------------------
  157.  
  158. LOCAL FN qbDrawLines (@xPtr&, @yPtr&, @indxPtr&, numElems%)
  159.   indxPos = {indxPtr&}                                   'read index value
  160.   offset% = indxPos * 2                                  'calc actual offset
  161.   CALL MOVETO ({xPtr& + offset%}, {yPtr& + offset%})     'move the pen there
  162.   FOR lineCount = 1 TO numElems%                         'now cycle through positions
  163.     indxPos = {indxPtr& + (lineCount * 2)}               'get next index value in sequence
  164.     offset% = indxPos * 2                                'calc actual offset
  165.     CALL LINETO ({xPtr& + offset%}, {yPtr& + offset%})   'draw line there
  166.   NEXT lineCount                                         'cycle until done
  167. END FN
  168.  
  169.  
  170.  
  171. ' --- OTHER FUNCTIONS -----------------------------------
  172.  
  173.  
  174. CLEAR LOCAL
  175. DIM pBlock.128
  176. DIM 63 dirName$
  177. DIM 255 pathName$
  178. LOCAL FN qbGetPathName$ (fName$, vRefNum%)
  179.   pathName$ = fName$                                     'put filename in pathname
  180.   pBlock.ioNamePtr&      = @dirName$                     'put pointer to dirName$
  181.   pBlock.ioVRefNum%      = vRefNum%                      'set vRefNun
  182.   pBlock.ioDrParID&      = [_curDirStore]                'get currect directory ID
  183.   pBlock.ioFDirIndex%    = -1                            'get info on folder
  184.   
  185.   DO
  186.     osErr% = FN GETCATINFO (@pBlock)                     'get catalog info
  187.     LONG IF osErr% = _noErr                              'no error then...
  188.       pathName$ =  dirName$ + ":" + pathName$            'add dirName to path
  189.       pBlock.ioDrDirID& = pBlock.ioDrParID&              'get folder's parent ID
  190.     END IF
  191.   UNTIL pBlock.ioDirID& = _fsRtParID                     'volume root ID
  192. END FN = pathName$
  193.  
  194.  
  195. LOCAL FN qbGetFileInfo (fName$, @pbPtr&)
  196.   pbPtr&.ioNamePtr&      = @fName$                       'put pointer to dirName$
  197.   pbPtr&.ioVRefNum%      = -{_sfSaveDisk}                'get vRefNun
  198.   pbPtr&.ioDrParID&      = [_curDirStore]                'get currect directory ID
  199.   osErr% = FN GETFILEINFO (pbPtr&)                       'get catalog info
  200. END FN
  201.  
  202.  
  203. CLEAR LOCAL
  204. DIM pt.4
  205. DIM rect.8
  206. LOCAL FN qbPtInRects (@ptPtr&, @rectPtr&, numRect, first, @boolPtr&)
  207.   pt;4 = ptPtr&
  208.   FOR count = first TO numRect
  209.     rect;8 = rectPtr& + (count * 8)
  210.     bool%  = FN PTINRECT (pt, rect)
  211.     POKE WORD (boolPtr& + (count * 2)), bool%
  212.   NEXT count
  213. END FN
  214.  
  215.  
  216. CLEAR LOCAL 
  217. DIM pBlock.128
  218. LOCAL FN qbPIC2PICTRsrc (fileName$, vRefNum%, resID)
  219.   OPEN "ID", #1, fileName$,, vRefNum%                    'open file ocntaining PICT string
  220.   fileSize = LOF (1,1)                                   'get file size
  221.   resHndl& = FN NEWHANDLE (fileSize)                     'create handle of that size
  222.   LONG IF resHndl& <> 0 AND SYSERROR = _noErr            'no errors
  223.     osErr = FN HLOCK (resHndl&)                          'lock handle
  224.     READ FILE#1, [resHndl&], fileSize                    'copy string data to handle
  225.     osErr = FN HUNLOCK (resHndl&)                        'unlock handle
  226.     CLOSE #1                                             'close the file
  227.     
  228.     fileRsrc$ = fileName$ + ".rsrc"                      'change name
  229.     vRefNum% = FOLDER ("", vRefNum%)                     'open folder to save file into
  230.     CALL CREATERESFILE (fileRsrc$)                       'create a new file w/rsrc fork
  231.     LONG IF FN RESERROR = _noErr                         'no errors so far
  232.       resRef = USR OPENRFPERM (fileRsrc$, vRefNum%, _fsCurPerm)'open file’s rsrc fork
  233.       LONG IF resRef <> 0 AND FN RESERROR = _noErr       'still no errors?
  234.         FN qbAddResource (resHndl&, _"PICT", resID, fileName$)'add PICT rsrc
  235.         CALL CLOSERESFILE (resRef)                       'close when done
  236.       END IF
  237.     END IF
  238.   END IF
  239. END FN
  240.  
  241.  
  242. ' --- DIALOG FUNCTIONS -----------------------------------
  243.  
  244.  
  245. LOCAL FN qbGetDialogBtn (dlogPtr&, itemID%)
  246.   DIM itemRect.8
  247.   CALL GETDITEM (dlogPtr&, itemID%, itemType%, itemHndl&, itemRect)
  248.   LONG IF itemHndl& <> 0
  249.     btnValue% = FN GETCTLVALUE (itemHndl&)
  250.   END IF
  251. END FN = btnValue%
  252.  
  253.  
  254. LOCAL FN qbGetDialogText$ (dlogPtr&, itemID%)
  255.   DIM itemRect.8
  256.   CALL GETDITEM (dlogPtr&, itemID%, itemType%, itemHndl&, itemRect)
  257.   LONG IF itemHndl& <> 0
  258.     CALL GETITEXT (dlogPtr&, itemText$)
  259.   END IF
  260. END FN = itemText$
  261.  
  262.  
  263. LOCAL FN qbSetDialogBtn (dlogPtr&, itemID%, btnValue%)
  264.   DIM itemRect.8
  265.   CALL GETDITEM (dlogPtr&, itemID%, itemType%, itemHndl&, itemRect)
  266.   LONG IF itemHndl& <> 0
  267.     CALL SETCTLVALUE (itemHndl&, btnValue%)
  268.   END IF
  269. END FN
  270.  
  271.  
  272. LOCAL FN qbSetDialogText (dlogPtr&, itemID%, itemText$)
  273.   DIM itemRect.8
  274.   CALL GETDITEM (dlogPtr&, itemID%, itemType%, itemHndl&, itemRect)
  275.   LONG IF itemHndl& <> 0
  276.     CALL SETITEXT (dlogPtr&, itemText$)
  277.   END IF
  278. END FN
  279.  
  280.  
  281.  
  282.